#define _CRT_SECURE_NO_WARNINGS 1
#include <cmath>
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
#define ll long long
//int t,a, b, x, y;
//int rec(int x, int y) {
//	int	tmpy = max(a * y, a * (b-1-y));
//	int tmpx = max(b * x, b * (a - x - 1));
//	return max(tmpy, tmpx);
//}
//int main() {
//	cin >> t;
//	while (t--)
//	{
//		cin >> a >> b >> x >> y;
//		cout << rec(x, y) << "\n";
//	}
//	return 0;
//}

//int t, a, b, p,sum,ok;
//string s;
//int main() {
//	cin >> t;
//	while (t--) {
//		cin >> a >> b >> p;
//		cin >> s;
//		int q = s.size();
//		s[q - 1] = 'C';
//		bool flag = true;
//		for (int i = q-1; i>=1; i--)
//		{
//			if (s[i] != s[i - 1])
//			{
//				if (s[i-1]=='A'&&(p-a)>=0)
//				{
//					p -= a;
//				}
//				else if (s[i - 1] == 'B' && (p - b) >= 0) {
//					p -= b;
//				}
//				else {
//					ok = i + 1;
//					flag = false;
//					printf("%d\n", ok);
//					break;
//				}
//			}
//		}
//		if (flag) {
//			printf("%d\n", 1);
//		}
//	}
//	return 0;
//}
//
//int t, n, arr[105],sum,ans1,ans2[2];
//int main() {
//	cin >> t;
//	while (t--) {
//		cin >> n;
//		bool even= false;
//		for (int i = 1; i <= n; i++)
//		{
//			cin >> arr[i];
//			if (!even&&arr[i]%2==0)
//			{
//				sum = 1;
//				ans1 = i;
//				even = true;
//			}
//		}
//		if (even) {
//			printf("1\n");
//			printf("%d\n", ans1);
//		}
//		else
//		{
//			int odd = 0;
//			for (int i = 1; i <= n; i++)
//			{
//				if (arr[i] % 2 != 0 && odd < 2)
//					ans2[odd++] = i;
//			}
//			if (odd == 2)
//			{
//				printf("2\n");
//				printf("%d %d\n", ans2[0], ans2[1]);
//			}
//			else
//				printf("-1\n");
//		}
//	}
//	return 0;
//}
//int t, n, arr[105];
//int main() {
//	cin >> t;
//	while (t--) {
//		cin >> n;
//		bool ok=true;
//		for (int i = 1; i <= n; i++)
//		{
//			cin >> arr[i];
//			if ((arr[1] & 1) != (arr[i] & 1))ok = 0;
//		}
//		ok?printf("YES\n"):printf("NO\n");
//	}
//	return 0;
//}

//int t, n, arr[5006];
//
//bool check(int x, int n) {
//	for (int i = n; i >=x+2;i--)
//	{
//		if (arr[i] == arr[x])
//			return true;
//	}
//	return false;
//}
//	
//
//int main() {
//	cin >> t;
//	while (t--)
//	{
//		cin >> n;
//		for (int i = 1; i <= n; i++)
//		{
//			cin >> arr[i];
//		}
//		bool flag = true;
//		for (int i = 1; i <=n-2; i++)
//		{
//			if (check(i,n))
//			{
//				printf("YES\n");
//				flag = false;
//				break;
//			}
//		}
//		if (flag)
//		{
//			printf("NO\n");
//		}
//	}
//	return 0;
//}

//int t, n, arr[100010];
//int main() {
//	cin >> t;
//	while (t--) {
//		cin >> n;
//		for (int i = 1; i <= n; i++)
//		{
//			cin >> arr[i];
//		}
//		sort(arr + 1, arr + 1 + n);
//		int tmp = unique(arr + 1, arr + 1 + n) - (arr+1);
//		printf("%d\n", min(tmp, n));
//	}
//	return 0;
//}

//long long t, n, k;
//int main() {
//	cin >> t;
//	while (t--) {
//		cin >> n >> k;
//		if (n < k * k)
//			printf("NO\n");
//		else if ((k & 1) == (n & 1))
//			printf("YES\n");
//		else
//			printf("NO\n");
//	}
//	return 0;
//}

//ll t, n, k,tmp;
//
//int main() {
//	cin >> t;
//	while (t--) {
//		cin >> n >> k;
//		int i = 1;
//		int j = 0;
//		tmp = 0;
//		while (i <= n) {
//			tmp += i++;
//			if (tmp >= k) {
//				break;
//			}
//		}
//		i--;
//		while (k+j<tmp)
//		{
//			j++;
//		}
//		for (int k = 1; k <= n; k++) {
//			if (k==n-i||k==n-i+1+j)
//			{
//				printf("b");
//			}
//			else
//				printf("a");
//		 }
//		printf("\n");
//	}
//	return 0;
//}


//int t, n, a[60];
//int main() {
//	cin >> t;
//	while (t--) {
//		cin >> n;
//		int tmp = 0;
//		for (int i = 1; i <= n; i++)
//		{
//			cin >> a[i];
//			if (a[i-1]>a[i])
//			{
//				tmp++;
//			}
//		}
//		if (tmp >= 2)printf("No\n");
//		else if (tmp == 1 && a[1] < a[n])printf("No\n");
//		else printf("Yes\n");
//	}
//	return 0;
//}

//int t, n, x;
//int a[110];
//int main() {
//	cin >> t;
//	while (t--) {
//		cin >> n >> x;
//		int sum = 0, ans = 0;
//		bool flag = true;
//		for (int i = 1; i <= n; i++)
//		{
//			cin >> a[i];
//		}
//		sort(a + 1, a + 1 + n);
//		n = unique(a + 1, a + 1 + n) - a-1;
//		sum += a[1] - 1;
//		if (sum>x)
//		{
//			ans = x;
//			flag = false;
//		}
//		else {
//			for (int i = 2; i <= n; i++)
//			{
//				sum += a[i] - a[i - 1] - 1;
//				if (sum>x)
//				{
//					sum-= a[i] - a[i - 1] - 1;
//					ans = x - sum + a[i - 1];
//					flag = false;
//					break;
//				}
//			}
//		}
//		if (flag)
//		{
//			ans = x - sum + a[n];
//		}
//		printf("%d", ans);
//	}
//	return 0;
//}
//int t, n, x, v;
//int a;
//bool flag[1005];
//int main() {
//	cin >> t;
//	while (t--) {
//		int cnt = 0;
//		memset(flag, 0, sizeof(flag));
//		cin >> n >> x;
//		for (int i = 1; i <= n; i++) {
//			cin >> a;
//			flag[a] = true;
//		}
//		while (true) {
//			cnt++;
//			if (!flag[cnt]) {
//				if (x > 0)
//					x--;
//				else 
//					break;
//			}
//		}
//		printf("%d\n", --cnt);
//	}
//	return 0;
//}

//int t, n, x,maxn,ans;
//int a[100010];
//int main() {
//	cin >> t;
//	while (t--) {
//		cin >> n >> x;
//		ans = 0;
//		maxn = 0;
//		for (int i = 1; i <= n; i++)
//		{
//			cin >> a[i];
//			maxn = max(a[i], maxn);
//			if (a[i]==x)
//			{
//				ans = 1;
//			}
//		}
//		if (!ans)
//		{
//			while (1) {
//				if (x > 2 * maxn)
//				{
//					x -= maxn;
//					ans++;
//				}
//				if (x <= 2 * maxn)
//				{
//					ans += 2;
//					x -= 2 * maxn;
//				}
//				if (x <= 0)
//					break;
//			}
//		}
//		printf("%d\n", ans);
//	}
//	return 0;
//}
int t, n, x, ans, maxn;
int main() {
	cin >> t;
	while (t--)
	{
		cin >> n >> x;
		ans = 0, maxn = 0;
		int tmp = 0;
		for (int i = 1; i <= n; i++)
		{
			cin >> tmp;
			if (tmp == x)ans = 1;
			maxn=max(tmp, maxn);
		}
		if (ans == 1)printf("%d\n", 1);
		else if (maxn > x)
			printf("%d\n", 2);
		else {
			if (x%maxn==0)
			{
				ans = x / maxn;
			}
			else
				ans = x / maxn + 1;
			printf("%d\n", ans);
		}
	}
	return 0;
}